package io.adrainty.bolee.insurance.repository;

import com.baomidou.mybatisplus.core.metadata.IPage;
import io.adrainty.bolee.insurance.models.entity.CategoryCoefficientEntity;
import io.adrainty.bolee.insurance.models.entity.CategoryConditionEntity;
import io.adrainty.bolee.insurance.models.entity.CategoryEntity;
import io.adrainty.bolee.insurance.models.entity.CategorySafeguardEntity;

import java.util.List;
import java.util.Set;

/**
 * <p>ICategoryServiceRepository</p>
 *
 * @author AdRainty
 * @version V1.0.0
 * @description CategoryServiceRepository
 * @since 2025/8/11 10:23:26
 */
public interface ICategoryRepository {

    /**
     * <p>分页获取保险分类</p>
     *
     * @param pageNum  页码
     * @param pageSize 页大小
     * @param searchDTO 查询条件
     * @return IPage<CategoryEntity>
     */
    IPage<CategoryEntity> findCategoryPage(Integer pageNum, Integer pageSize, CategoryEntity searchDTO);

    /**
     * <p>获取保险分类列表</p>
     *
     * @param searchDTO 搜索条件
     * @return List<CategoryEntity>
     */
    List<CategoryEntity> findCategoryList(CategoryEntity searchDTO);

    /**
     * <p>通过保险分类编号查询保险子分类</p>
     *
     * @param categoryType 分类类型
     * @param parentCategoryNo 保险分类编号
     * @return List<CategoryEntity>
     */
    List<CategoryEntity> findSubCategoryList(String categoryType, String parentCategoryNo);

    /**
     * <p>通过保险分类编号查询保险一级分类</p>
     *
     * @param parentCategoryNo 保险分类编号
     * @return List<CategoryEntity>
     */
    List<CategoryEntity> findSub1LevelCategoryList(String parentCategoryNo);

    /**
     * <p>通过保险分类编号查询保险分类</p>
     *
     * @param idList 保险分类编号
     * @return List<CategoryEntity>
     */
    List<CategoryEntity> listCategoryList(List<String> idList);

    /**
     * <p>创建保险分类</p>
     *
     * @param entity 保险分类
     * @return Boolean
     */
    boolean createCategory(CategoryEntity entity);

    /**
     * <p>修改保险分类</p>
     *
     * @param entity 保险分类
     * @return Boolean
     */
    boolean updateCategory(CategoryEntity entity);

    /**
     * <p>删除保险分类</p>
     *
     * @param deleteIdList 删除ID列表
     * @return Boolean
     */
    boolean deleteCategory(List<String> deleteIdList);

    /**
     * <p>通过保险分类编号查询保险分类条件</p>
     *
     * @param categoryNoSet 保险分类编号
     * @return List<CategoryConditionEntity>
     */
    List<CategoryConditionEntity> findCategoryConditionByCategoryNo(Set<String> categoryNoSet);

    /**
     * <p>通过保险分类编号查询保险分类保障项</p>
     *
     * @param categoryNoSet 保险分类编号
     * @return List<CategoryCoefficientEntity>
     */
    List<CategorySafeguardEntity> findCategorySafeguardByCategoryNo(Set<String> categoryNoSet);

    /**
     * <p>通过保险分类编号查询保险分类系数项</p>
     *
     * @param categoryNoSet 保险分类编号
     * @return List<CategoryCoefficientEntity>
     */
    List<CategoryCoefficientEntity> findCategoryCoefficientByCategoryNo(Set<String> categoryNoSet);

    /**
     * <p>通过保险分类编号删除保险分类条件项</p>
     *
     * @param categoryNo 保险分类编号
     */
    void deleteCategoryConditionByCategoryNo(List<String> categoryNo);

    /**
     * <p>批量保存保险分类条件项</p>
     *
     * @param conditionVOs 保存条件项
     */
    void saveBatchCategoryCondition(List<CategoryConditionEntity> conditionVOs);

    /**
     * <p>通过保险分类编号删除保险分类系数项</p>
     *
     * @param categoryNo 保险分类编号
     */
    void deleteCategoryCoefficientByCategoryNo(List<String> categoryNo);

    /**
     * <p>批量保存保险分类系数项</p>
     *
     * @param coefficientVOs 保存系数项
     */
    void saveBatchCategoryCoefficient(List<CategoryCoefficientEntity> coefficientVOs);

    /**
     * <p>通过保险分类编号删除保险分类保障项</p>
     *
     * @param categoryNo 保险分类编号
     */
    void deleteCategorySafeguardByCategoryNo(List<String> categoryNo);

    /**
     * <p>批量保存保险分类保障项</p>
     *
     * @param safeguardVOs 保存保障项
     */
    void saveBatchCategorySafeguard(List<CategorySafeguardEntity> safeguardVOs);

    /**
     * <p>获取分类保障项列表</p>
     *
     * @param entity 查询条件
     * @return 分类保障项列表
     */
    List<CategoryConditionEntity> findCategoryConditionList(CategoryConditionEntity entity);
}
